package uiLayer;

import ctrLayer.*;
import modelLayer.*;

/**
 * Aftale delen af Tui-laget.
 * 
 * @author (Gruppe 2. Jonas, Danny, Kasper, Bruno & Jesper) 
 * @version (17/12-2012)
 */
public class AftaleUI
{
    // Attributter
    private AftaleCtr aftaleCtr;

    /**
     * Ctor
     */
    public AftaleUI()
    {
        startAftaleUI();
    }
    
    private void startAftaleUI()
    {
        boolean exit = false;
        
        while (!exit)
        {
            int input = getMainMenu();
            
            if (input == 1) { // Opret ordre
               opretAftale();
            }  else if (input == 2) { // Gå tilbage
                exit = true;
            } else {
                MainUI.ugyldigtInput();
            }
        }
    }
    
    private int getMainMenu()
    {
       System.out.println("Ordrer:");
       System.out.println("1. Opret ordre");
       System.out.println("2. Gå tilbage");

       int input = MainUI.getIntInput();
        
       return input;
    }
    
    /**
     * Interaktionen for opret vare.
     */
    private void opretAftale()
    {
        aftaleCtr = new AftaleCtr();
        
        // Personen ordren tildeles til.
        Person person = null;
        
        // Opret aftale.
        aftaleCtr.opretAftale(AftaleType.ORDRE);
        
        /**
         * Find kunden som varerne skal associeres til.
         * Bliv ved med at spørge indtil en person er fundet, eller der afsluttes.
         */
        boolean fejl;
        do
        {
            fejl = false;
            
            // Spørg efter tlf, som der skal søges efter.
            String tlf = MainUI.getStringInput("Indtast kunde tlf:");
            
            // Check om controlleren returnerer en fejl (exception).
            try
            {
                aftaleCtr.findOgSetKunde(tlf);
                
                // Tildel den fundne person til lokal variable (skal bruges til ordrebekræftelse).
                person = (new PersonCtr()).findPerson(tlf);
            }
            catch (Exception e)
            {
                // Hop ud af methoden, hvis der skrives "exit".
                if (tlf.equals("exit"))
                    return;
                
                fejl = true;
                System.out.println(e.getMessage() + " - prøv igen, eller skriv exit.");
            }
                
        } while(fejl == true);
        
        
        /**
         * Tilføj vare(r) til ordren.
         */
        System.out.println("Køb af varer:");
        boolean tilfoejFlereVarer = true;
        int vareNr = 1;
        do
        {
            System.out.println("Indtast varedata for vare nr. " + vareNr + ":");
            
            do
            {
                fejl = false;
                
                String type = MainUI.getStringInput("Indtast vare type:");
                int antal = MainUI.getIntInput("Indtast vare antal:");
                
                try
                {
                    aftaleCtr.findOgAddVare(type, antal);
                }
                catch (Exception e)
                {
                    if (type.equals("exit"))
                        return;
                    
                    fejl = true;
                    System.out.println(e.getMessage() + " - prøv igen, eller skriv exit.");
                }
            } while (fejl == true);
            
            // Beslut om der skal tilføjes mere end én vare.
            int fortsaet = MainUI.getIntInput("Tast 1 for at indtaste flere varer. Tast 2 for at afslutte.");
            if (fortsaet == 2)
            {
                tilfoejFlereVarer = false;
            }
            vareNr++;
        } while (tilfoejFlereVarer);
        
        /**
         * Vis ordrebekræftelse.
         */
        if (person != null)
        {
            System.out.println("Ordre information:");
            System.out.println("Kunde oplysninger:");
            System.out.println("Personens navn: " + person.getNavn());
            System.out.println("Personens adresse: " + person.getAdresse());
            System.out.println("Personens post nr: " + person.getPostNr());
            System.out.println("Personens by: " + person.getBy());
            System.out.println("Personens tlf: " + person.getTlf());
            System.out.println("Personens email: " + person.getEmail());
            
            System.out.println("Varer:");
            // Udskriver alle varerne i formattet:
            //      <vareId>: <vareType>, Antal: <vareAntal>, Subtotal: <vareSubtotal>
            double totalpris = 0;
            for (DelOrdre dO : aftaleCtr.getDelOrdrer())
            {
                System.out.println(dO.getIdAfVare() + ": " + dO.getVare().getType() +
                    ", Antal: " + dO.getAntal() +
                    ", Subtotal: " + dO.getSubtotal());
                totalpris += dO.getSubtotal();
            }
            System.out.println("Pris i alt: " + totalpris);
            
            System.out.println("");
            int bekraeft = MainUI.getIntInput("Bekræft ordre? (Tast 1 for ja. Tast 2 for nej)");
            if (bekraeft == 1)
            {
                // Tilføj aftalen til containeren.
                aftaleCtr.tilfoejAftale();
            }
            else
            {
                return;
            }
        }
    }
}
